package edu.pe.cayetano.model.bo;

import ws.synopsis.frmwrk.common.BResult;
import edu.pe.cayetano.dao.CicloDAO;
import edu.pe.cayetano.dao.OperacionesComunesDAO;
import edu.pe.cayetano.framework.BusinessException;
import edu.pe.cayetano.framework.Configuration;
import edu.pe.cayetano.seccd.constantes.ConstantesMensajes;
import edu.pe.cayetano.seccd.constantes.ConstantesSECCD;

public class CicloBO extends BaseBO{

	private	String		schema			= Configuration.getSchemaDB();
	
	/**
	 * Metodo que lista los periodos academicos
	 * */
	public BResult listarCiclos() throws BusinessException{
		BResult 				retSalida		= null;
		StringBuffer 			query 			= new StringBuffer(); 
		OperacionesComunesDAO	operacionesDAO	= null;
		try{
			query = estableceQuery(ConstantesSECCD.OPERACION_LISTADO,"","");
			conectar();
			operacionesDAO	 	= new OperacionesComunesDAO(conn);
			retSalida 	= operacionesDAO.listado(query);
		}catch(Exception e){
			retSalida = new BResult();
			retSalida.setCode(ConstantesSECCD.ERROR_RET);
			retSalida.setMessage("[CicloBO] error en metodo listarCiclos generado por:"+e.getMessage());
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida = new BResult();
				retSalida.setCode(ConstantesSECCD.ERROR_RET);
				retSalida.setMessage("[CicloBO] error en metodo listarCiclos generador po:"+e.getMessage());
			}
		}
		return retSalida;
	}
	/**
	 * Metodo que establece el query para el listado de ciclos
	 * */
	public StringBuffer estableceQuery(String operacion,String campo,String criterio){
		StringBuffer 			query 			= new StringBuffer();
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_BUSQUEDA)){
			if(campo.equalsIgnoreCase("todos")){
				query.append(" SELECT  CICLO_ID AS CICLO,NOMBRE AS NOMBRE");
				query.append(" FROM "+schema+"CICLO");
				query.append(" WHERE CICLO_ID NOT IN (0) ORDER BY CICLO_ID");
			}else{
				query.append(" SELECT  CICLO_ID AS CICLO,NOMBRE AS NOMBRE");
				query.append(" FROM "+schema+"CICLO");
				query.append(" WHERE CICLO_ID NOT IN (0) ");
				query.append(" AND UPPER("+campo.toUpperCase()+") LIKE '%"+criterio.toUpperCase()+"%' ORDER BY CICLO_ID"); 
			}
		}
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_LISTADO)){
			query.append(" SELECT  CICLO_ID AS CICLO,NOMBRE AS NOMBRE");
			query.append(" FROM "+schema+"CICLO");
			query.append(" WHERE CICLO_ID NOT IN (0) ORDER BY CICLO_ID");
		}
		System.out.println("[CicloBO][estableceQuery] query:"+query.toString());
		return query;
	}
	
	
	/**
	 * Metodo que establece el query para el listado de ciclos
	 * */
	public StringBuffer estableceQueryAnterior(String operacion,String campo,String criterio){
		StringBuffer 			query 			= new StringBuffer();
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_BUSQUEDA)){
			if(campo.equalsIgnoreCase("todos")){
				query.append(" SELECT  B.NOMBRE AS PERIODO,C.NOMBRE AS CICLO,P.NOMBRE AS PLAN,M.NOMBRE AS MATRIZ");
				query.append(" FROM "+schema+"PERIODO_ACAD_CICLO A INNER JOIN "+schema+"PERIODO_ACADEMICO B");
				query.append(" ON A.PERIODOACADEMICO_ID=B.PERIODOACADEMICO_ID"); 
				query.append(" INNER JOIN "+schema+"CICLO C ON C.CICLO_ID=A.CICLO_ID");
				query.append(" INNER JOIN "+schema+"PLAN_CURRICULAR P ON P.PLANCUR_ID=A.PLANCUR_ID");
				query.append(" INNER JOIN "+schema+"MATRIZ_RUBRICA M ON M.MATRIZRUBRICA_ID=M.MATRIZRUBRICA_ID");
				query.append(" WHERE ESTADO_ID=1 AND C.CICLO_ID NOT IN (0)");
			}else{
				query.append(" SELECT  B.NOMBRE AS PERIODO,C.NOMBRE AS CICLO,P.NOMBRE AS PLAN,M.NOMBRE AS MATRIZ");
				query.append(" FROM "+schema+"PERIODO_ACAD_CICLO A INNER JOIN "+schema+"PERIODO_ACADEMICO B");
				query.append(" ON A.PERIODOACADEMICO_ID=B.PERIODOACADEMICO_ID"); 
				query.append(" INNER JOIN "+schema+"CICLO C ON C.CICLO_ID=A.CICLO_ID");
				query.append(" INNER JOIN "+schema+"PLAN_CURRICULAR P ON P.PLANCUR_ID=A.PLANCUR_ID");
				query.append(" INNER JOIN "+schema+"MATRIZ_RUBRICA M ON M.MATRIZRUBRICA_ID=M.MATRIZRUBRICA_ID");
				query.append(" WHERE ESTADO_ID=1 AND C.CICLO_ID NOT IN (0)");
				query.append(" AND UPPER("+campo.toUpperCase()+") LIKE '%"+criterio.toUpperCase()+"%'"); 
			}

		}
		if(operacion.equalsIgnoreCase(ConstantesSECCD.OPERACION_LISTADO)){
			query.append(" SELECT  B.NOMBRE AS PERIODO,C.NOMBRE AS CICLO,P.NOMBRE AS PLAN,M.NOMBRE AS MATRIZ");
			query.append(" FROM "+schema+"PERIODO_ACAD_CICLO A INNER JOIN "+schema+"PERIODO_ACADEMICO B");
			query.append(" ON A.PERIODOACADEMICO_ID=B.PERIODOACADEMICO_ID"); 
			query.append(" INNER JOIN "+schema+"CICLO C ON C.CICLO_ID=A.CICLO_ID");
			query.append(" INNER JOIN "+schema+"PLAN_CURRICULAR P ON P.PLANCUR_ID=A.PLANCUR_ID");
			query.append(" INNER JOIN "+schema+"MATRIZ_RUBRICA M ON M.MATRIZRUBRICA_ID=M.MATRIZRUBRICA_ID");
			query.append(" WHERE ESTADO_ID=1 AND C.CICLO_ID NOT IN (0)");
		}
		System.out.println("[CicloBO][estableceQuery] query:"+query.toString());
		return query;
	}
	
	/**
	 * Metodo que obtiene el listado de ciclos para ser utilizado en controles combo box
	 * */
	public BResult getCiclos() throws BusinessException{
		
		BResult 			retSalida			= new BResult();
		try{
			BResult retConn = conectar();
			if(retConn.getCode()==0 && retConn.getObject()!=null){
				
				CicloDAO cicloDAO = new CicloDAO(conn);
				
				BResult retListado = cicloDAO.getCiclos(); 
				
				if(retListado.getCode()==0 && retListado.getObject()!=null){
					retSalida.setCode(ConstantesSECCD.EXITO_RET);
					retSalida.setObject(retListado.getObject());
				}else{
					retSalida.setCode(ConstantesSECCD.ERROR_RET);
					retSalida.setObject(null);
				}
			}else{
				retSalida.setCode(retConn.getCode());
				retSalida.setMessage(ConstantesMensajes.ERROR_AMBIENTE);
			}		
		}catch(Exception e){
			retSalida.setCode(ConstantesSECCD.ERROR_RET);
		}finally{
			try{
				desconectar();
			}catch(Exception e){
				retSalida.setCode(ConstantesSECCD.ERROR_RET);
			}
		}
		return retSalida;
	}
}
